package xyz.heyaoshare.core.service.system;

import com.mybatisflex.core.service.IService;
import xyz.heyaoshare.common.entity.bo.ResultPage;
import xyz.heyaoshare.core.controller.system.role.vo.req.*;
import xyz.heyaoshare.core.controller.system.role.vo.resp.RoleDetailRespVO;
import xyz.heyaoshare.core.controller.system.role.vo.resp.RoleListRespVO;
import xyz.heyaoshare.core.controller.system.role.vo.resp.RolePageRespVO;
import xyz.heyaoshare.core.controller.system.role.vo.resp.RolePermissionRespVO;
import xyz.heyaoshare.core.entity.system.Role;

import java.util.List;

/**
 * 角色 Service
 * @author YueHe
 * @version 0.0.1
 * @since 2025/6/25 下午2:00
 */
public interface RoleService extends IService<Role> {

    /**
     * 新增角色
     *
     * @param reqVO 新增对象
     * @return 新增状态
     */
    Long insert(RoleInsertReqVO reqVO);

    /**
     * 角色分页
     *
     * @param reqVO 分页请求
     * @return 分页数据
     */
    ResultPage<RolePageRespVO> selectPage(RolePageReqVO reqVO);

    /**
     * 角色列表
     *
     * @param reqVO 请求参数
     * @return 角色列表
     */
    List<RoleListRespVO> selectList(RoleListReqVO reqVO);

    /**
     * 角色详情
     *
     * @param reqVO 请求参数
     * @return 详情数据
     */
    RoleDetailRespVO selectDetail(RoleDetailReqVO reqVO);

    /**
     * 删除角色
     *
     * @param reqVO 请求数据
     * @return 删除状态
     */
    Boolean delete(RoleDeleteReqVO reqVO);

    /**
     * 更新角色
     *
     * @param reqVO 更新数据
     * @return 更新状态
     */
    Boolean updateData(RoleUpdateReqVO reqVO);

    /**
     * 设置角色权限
     *
     * @param reqVO 请求数据
     * @return 设置状态
     */
    Boolean setPermissions(RoleSetPermissionReqVO reqVO);

    /**
     * 获取角色权限
     *
     * @param reqVO 请求数据
     * @return 权限列表
     */
    RolePermissionRespVO getPermissions(RolePermissionReqVO reqVO);

    /**
     * 更新角色状态
     * @param reqVO 请求数据
     * @return 更新状态
     */
    Boolean updateStatus(RoleUpdateStatusReqVO reqVO);

}